package org.dormi.learn;

/**
 * Bootstrap Classloader 启动 类加载器
 *
 * @author : dormi330
 * @since : 22/04/21
 */
public class ClassLoaderDemo01 {
    public static void main(String[] args) {
        /*
         * Bootstrap classloader 启动类加载
         * 主要用于加载jdk的核心类库, c++实现的
         * 加载 sun.boot.class.path
         * 如 $JRE_HOME\jre\lib下的 rt.jar resources.jar charsets.jar 等
         *
         * -Xbootclasspath:路径   指定的路径会完全取代jdk核心的搜索路径  坚决不要用
         * -Xbootclasspath/a:路径 指定的路径会在jdk核心类后搜索        可用
         * -Xbootclasspath/p:路径 指定的路径会在jdk核心类前搜索        可用, 不建议用
         *
         * 类加载器:
         * 如果某个类已被加载, 则再碰到此类就不再加载
         */
        System.out.println(String.class.getClassLoader()); // null
        // bootstrap类加载器的classloader 都是null

        String paths = System.getProperty("sun.boot.class.path");
        String[] arr = paths.split(";"); // windows ;  linux :
        for (String s : arr) {
            System.out.println(s);
        }
    }
}
/*
null
D:\portal\jdk1.8.0_181\jre\lib\resources.jar
D:\portal\jdk1.8.0_181\jre\lib\rt.jar
D:\portal\jdk1.8.0_181\jre\lib\sunrsasign.jar
D:\portal\jdk1.8.0_181\jre\lib\jsse.jar
D:\portal\jdk1.8.0_181\jre\lib\jce.jar
D:\portal\jdk1.8.0_181\jre\lib\charsets.jar
D:\portal\jdk1.8.0_181\jre\lib\jfr.jar
D:\portal\jdk1.8.0_181\jre\classes


如果指定 JVM参数 -Xbootclasspath/a:F:\download\trino-jdbc-377.jar
则输出就会是这样, 注意多了最后一行
null
D:\portal\jdk1.8.0_181\jre\lib\resources.jar
D:\portal\jdk1.8.0_181\jre\lib\rt.jar
D:\portal\jdk1.8.0_181\jre\lib\sunrsasign.jar
D:\portal\jdk1.8.0_181\jre\lib\jsse.jar
D:\portal\jdk1.8.0_181\jre\lib\jce.jar
D:\portal\jdk1.8.0_181\jre\lib\charsets.jar
D:\portal\jdk1.8.0_181\jre\lib\jfr.jar
D:\portal\jdk1.8.0_181\jre\classes
F:\download\trino-jdbc-377.jar
*/
